package com.workman.dao;

import java.util.List;
import java.util.Map;

public interface BaseDao {

    /**
     * 根据Id获取对象
     *
     * @param sqlId 脚本编号
     * @param id    主键
     * @return cls对应的类
     */
    public <E> E queryForObject(String sqlId, int id);

    /**
     * 根据条件获取对象
     *
     * @param sqlId  脚本编号
     * @param params 参数
     * @return
     */
    public <E> E queryForObject(String sqlId, Map<String, Object> params);

    /**
     * 获取数据总条数
     *
     * @param sqlId  脚本编号
     * @param params 参数
     * @return 条数
     */
    public int getTotalCount(String sqlId, Map<String, String> params);

    /**
     * 根据条件查询数量
     * @param sqlId
     * @param params
     * @return
     */
    public int queryCount(String sqlId, Map<String, Object> params);

    /**
     * 查询列表
     *
     * @param sqlId 脚本编号
     * @param params 参数
     * @return 列表
     */
    public List<Map<String, Object>> queryForList(String sqlId, Map<String, Object> params);

    /**
     * 查询列表
     *
     * @param sqlId 脚本编号
     * @param params 参数
     * @return 列表
     */
    public <E> List<E> queryForList(String sqlId, Map<String, Object> params, E e);


    /**
     * 插入数据
     *
     * @param sqlId  脚本编号
     * @param object 待插入的对象
     * @return 插入条数
     */
    public int insert(String sqlId, Object object);

    /**
     * 修改数据
     *
     * @param sqlId  脚本编号
     * @param object 对象
     * @return 修改的行数
     */
    public int update(String sqlId, Object object);

    /**
     * 删除数据
     *
     * @param sqlId 脚本编号
     * @param id    主键
     * @return 主键
     */
    public int delete(String sqlId, int id);

    /**
     * 删除数据
     *
     * @param sqlId 脚本编号
     * @param map   待删除的对象
     * @return 主键
     */
    public int delete(String sqlId, Map<String, Object> map);
}
